package com.atguigu.bigdata.scala.chapter06

object Scala12_Object_Single_2 {

    def main(args: Array[String]): Unit = {

        // TODO - 单例
        // 使用object关键字声明的就是一个单例的对象
        // 这个对象的类型是 ： Scala12_Object_Single_2$

        // 如果想要获取的是伴生类的单例怎么办？
        // Order
        //println(Order)
        // new Order()
        // java中声明单例，一般会构造方法私有化，然后提供公共的，静态的，返回本类型的方法。
        // scala中一般将静态的操作放置在伴生对象中
        // 伴生对象可以访问伴生类中的任何内容,私有的也能访问
//        val order = Order.instance()
//        println(order)

        // 构建对象的方式：
        val order1 = new Order(); // 调用伴生类的构造方法
        val order2 = Order;  // 获取伴生对象
        val order3 = Order.apply() // 调用伴生对象的方法创建伴生类对象
        // scala中为了创建对象方便，可以自动识别创建对象的方法：
        // 如果创建对象的方法名时指定方法名为( apply )，那么调用时就可以省略
        // apply方法可以重载的
        // 集合对象基本上都是使用apply方式创建的
        val order4 = Order()
        val order5 = Order("zhangsan")

        println(order3)
        println(order4)
        println(order5)

        for ( i <- Range(1, 5) ) {

        }
    }
}
class Order {

}
object Order {
    def apply() = {
        new Order()
    }
    def apply(name:String) = {
        new Order()
    }
}
